home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / mail / mh / contrib / jpeek / search < prev    next >
Text File  |  1992-08-08  |  3KB  |  95 lines

  1. #! /bin/sh
  2. # $Header: /home/jerry/.bin/RCS/search,v 1.5 92/08/09 23:26:35 jerry mh_contrib $
  3. ###    search - search for mail containing some regular expression(s)
  4. ###    Usage: search { 'regexp' -a 'regexp' ... } [+folder] [messages]
  5. ##
  6. ##    search MAKES THE pick -search COMMAND LINE EASIER TO TYPE.
  7. ##    search REPLACES "{" WITH "-lbrace" and "}" WITH "-rbrace".
  8. ##    IF YOU USE -a AND -o, IT PASSES THEM ON TO pick.
  9. ##    BUG: YOU NEED TO PUT SPACE AROUND { AND } SO THIS SCRIPT CAN SEE THEM.
  10. ##    OTHER ARGUMENTS BETWEEN { AND } HAVE -search ADDED BEFORE THEM.
  11. ##    FOR MORE INFO, TYPE man pick.
  12. ##
  13. ##    IF THE REGULAR EXPRESSION DOESN'T HAVE BAD CHARACTERS, YOU DON'T
  14. ##    NEED TO QUOTE IT.  HERE'S A SIMPLE SEARCH -- FINDING MESSAGES
  15. ##    THAT CONTAIN THE WORD fred IN UPPER OR LOWER CASE:
  16. ##        % search { fred }
  17. ##         465  10/04 Joe Mertz    MH questions<<Why would Fred want
  18. ##        1658+ 11/30 To:fred      New 'mhlinks' program replaces 
  19. ##
  20. ##    FOR EXAMPLE, IF YOU TYPE THIS COMMAND:
  21. ##        % search { 'fred.*ed' -a 'mary.*may' }
  22. ##    IT WILL ACTUALLY RUN THIS FOR YOU:
  23. ##        pick -lbrace -search 'fred.*ed' -and -search 'mary.*may' -rbrace
  24. ##    BUT THIS COMMAND IS A SYNTAX ERROR BECAUSE THERE AREN'T ANY BRACES:
  25. ##        % search 'fred.*ed' +foo
  26. ##        pick: bad message list fred.*ed
  27. ##    YOU CAN ALSO USE -o FOR "-or".  OTHER SWITCHES ARE PASSED TO pick.
  28. ##
  29. ##    AFTER search RUNS pick, IT RUNS scan picked.
  30. ##
  31. ##    BUG: IT'S ALMOST IMPOSSIBLE TO SEARCH FOR A DOUBLEQUOTE (").
  32. ##    USE PLAIN pick -search TO DO THAT.
  33.  
  34. #    NOTE TO HACKERS: TABSTOPS ARE SET AT 4 IN THIS CODE.
  35. #
  36. #    USE AT YOUR OWN RISK.  SEEMS TO WORK, BUT IT'S YOUR RESPONSIBILITY!
  37. #    PLEASE TELL ME ABOUT BUGS AND FIXES: Jerry Peek, jerry@ora.com
  38.  
  39. expr=/bin/expr        # I WISH THIS WAS BUILT-IN...
  40. mh=/usr/local/mh    # WHERE MH COMMANDS LIVE
  41. myname="`basename $0`"
  42.  
  43. # REMEMBER HOW MANY LEFT BRACES WE'VE SEEN WITHOUT MATCHING RIGHTS.
  44. # 0 MEANS NO NESTED BRACES... 1 MEANS 1 UNMATCHED, ETC:
  45. nesting=0
  46. # THIS IS THE COMMAND LINE FOR pick THAT WE'LL eval AT END OF SCRIPT:
  47. pickline=
  48. # PARSE COMMAND LINE:
  49. for arg
  50. do
  51.     case "$arg" in
  52.     \{)    nesting="`$expr $nesting + 1`"
  53.         pickline="$pickline -lbrace"
  54.         ;;
  55.     \})    nesting="`$expr $nesting - 1`"
  56.         pickline="$pickline -rbrace"
  57.         ;;
  58.     \{*|\}*)
  59.         # WE COULD FIX THIS WITH expr:
  60.         echo 1>&2 "$myname: Sorry; $arg needs space between text and brace."
  61.         exit 1
  62.         ;;
  63.     [+@]*)
  64.         case "$nesting" in
  65.         0)    folder="$arg" ;;
  66.         *)    pickline="$pickline -search \"$arg\"" ;;
  67.         esac
  68.         ;;
  69.     -a*)    pickline="$pickline -and" ;;
  70.     -o*)    pickline="$pickline -or" ;;
  71.     -*)    pickline="$pickline $arg" ;;
  72.     *)    case "$nesting" in
  73.         0)    pickline="$pickline $arg" ;;
  74.         *)    pickline="$pickline -search \"$arg\"" ;;
  75.         esac
  76.         ;;
  77.     esac
  78.  
  79.     shift
  80. done
  81.  
  82. case "$nesting" in
  83. 0)    if eval $mh/pick $folder $pickline -sequence picked
  84.     then
  85.         $mh/scan picked
  86.         exit
  87.     else
  88.         exit    # WITH STATUS FROM pick (MUST DO WITH else NOT AFTER fi)
  89.     fi
  90.     ;;
  91. *)    echo 1>&2 "$myname: unmatched brace."
  92.     exit 1
  93.     ;;
  94. esac
  95.